package com.beiding.t;

import com.alibaba.fastjson.JSONObject;
import com.beiding.jsonanalyzer.AnalyzeApi;
import com.beiding.jsonanalyzer.analyze.func.FuncBase;
import com.beiding.jsonanalyzer.analyze.query.ComparatorResult;
import com.beiding.jsonanalyzer.flow.ValueNode;

import java.io.IOException;

/**
 * @author 丁常磊
 * @date 2022/6/9 12:36
 */

public class 茅台会员白名单 {
    public static void main(String[] args) throws IOException {

        new Handler().test();

    }


    private static class Handler implements AnalyzeApi {

        private void test() {

//            ConnectGrammar connectGrammar = key("格式化入会时间").matches("abc").and(key("映射卡级别").in(list("03", null)));
//            System.out.println(connectGrammar.getQueryBuilder().createInstance());


//            System.out.println(eq("name").createInstance());
//            System.out.println(key("name").split("-").join("/").eq("abc").createInstance());


            FuncBase<ComparatorResult> instance = query(
                    key("name").concat("测试").split("-").len().le(10)
                            .or()
                            .key("age").eq(100)
            ).and(
                    len(key("name")).le(100)
            ).createInstance();

            ValueNode valueNode = new ValueNode();

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("name", "测试-");

            valueNode.set(jsonObject);


            System.out.println(key("name").concat("测试").split("-").foreach(self).createInstance().executeOne(valueNode));

        }
//
//        /**
//         * 处理只有cid的那个
//         *
//         * @throws IOException
//         */
//        private void handleCID() throws IOException {
//            CsvDatasource csvDatasource = new CsvDatasource(new InputStreamReader(new FileInputStream("F:\\项目\\茅台会员\\白名单生产会员处理\\仅CID.csv"), "gbk"));
//
//            FileWriter fileWriter = new FileWriter(new File("F:\\项目\\茅台会员\\白名单生产会员处理\\仅CID.sql"));
//
//            csvDatasource
//                    .flow()
//                    .map(((o, trigger) -> {
//
//                        String template = "INSERT INTO \"USER_WHITE_LIST\" (\"ID\", \"CID\", \"CUST_TYPE\", \"CMKHDATE\", \"CREATE_BY\", \"CREATE_TIME\", \"UPDATE_BY\", \"UPDATE_TIME\") SELECT '$ID', '$CID', NULL, NULL, '数据初始化', '2022-06-14', '数据初始化', '2022-06-14' FROM dual WHERE  ( SELECT COUNT( 1 ) FROM USER_WHITE_LIST WHERE CID = '$CID' ) =0" +
//                                " ;\n";
//
//                        String sql = template
//                                .replace("$ID", UUID.randomUUID().toString())
//                                .replace("$CID", o.getString(key("伙伴CID")));
//
//                        trigger.send(sql);
//
//                    }))
//                    .exec()
//                    .onEnd((end) -> {
//                        fileWriter.close();
//                        if (end.isError()) {
//                            System.out.println("执行失败");
//                        } else {
//                            System.out.println("执行成功");
//                        }
//                    })
//                    .forEach(valueNodeRow -> {
//                        fileWriter.write(valueNodeRow.getValueNode().get() + "");
//                    });
//
//        }
//
//
//        /**
//         * 处理白名单
//         *
//         * @throws IOException
//         */
//        private void handleWhiteList() throws IOException {
//            CsvDatasource csvDatasource = new CsvDatasource(new InputStreamReader(new FileInputStream("F:\\项目\\茅台会员\\白名单生产会员处理\\白名单.csv"), "gbk"));
//
//            FileWriter fileWriter = new FileWriter(new File("F:\\项目\\茅台会员\\白名单生产会员处理\\白名单.sql"));
//
//            csvDatasource
//                    .flow()
//                    .select(
//                            fetch(all),
//                            fetch(
//                                    key("入会时间")
//                                            .when(contains("/"))
//                                            .then(
//                                                    split("/").foreach(
//                                                            when(len().lt(2)).then(concat("0", self))
//                                                                    .default_(self)
//                                                    ).join("-")
//                                            )
//                                            .default_(self)
//                            ).as(key("格式化入会时间")),
//                            fetch(
//                                    key("会员等级").when("钻卡").then("03").default_(null)
//                            ).as(key("映射卡级别"))
//                    )
//                    .check(
//                            key("格式化入会时间").matches("[0-9]{4}-[0-9]{2}-[0-9]{2}").and().key("映射卡级别").in(list("03", null))
//                    )
//                    .map(((o, trigger) -> {
//
//                        String template = "INSERT INTO \"USER_WHITE_LIST\" (\"ID\", \"CID\", \"CUST_TYPE\", \"CMKHDATE\", \"CREATE_BY\", \"CREATE_TIME\", \"UPDATE_BY\", \"UPDATE_TIME\") VALUES ('$ID', '$CID', $CTYPE, $CTIME, '数据初始化', '2022-06-11', '数据初始化', '2022-06-11');\n";
//
//                        String sql = template
//                                .replace("$ID", UUID.randomUUID().toString())
//                                .replace("$CID", o.getString(key("伙伴CID")))
//                                .replace("$CTYPE", o.getString(If(eq(key("映射卡级别"), null), "null", concat("'", key("映射卡级别"), "'"))))
//                                .replace("$CTIME", o.getString(If(eq(key("格式化入会时间"), null), "null", concat("'", key("格式化入会时间"), "'"))));
//
//
//                        trigger.send(sql);
//
//                    }))
//                    .exec()
//                    .onEnd((end) -> {
//                        fileWriter.close();
//                        if (end.isError()) {
//                            System.out.println("执行失败");
//                            end.getException().printStackTrace();
//                        } else {
//                            System.out.println("执行成功");
//                        }
//                    })
//                    .forEach(valueNodeRow -> {
//                        fileWriter.write(valueNodeRow.getValueNode().get() + "");
//                    });
//
//        }
//    }
    }

}
